// JavaScript 拥有动态类型
//var x;               // x 为 undefined
//var num = 5;           // 现在 x number
//var str = "John";      // 现在 x 为字符串
//console.log(x);
//console.log(num);
//console.log(str);

// JavaScript 字符串
// var str = "Hello word!";
// var str = 'Hello word!';
// console.log(str);

// var str="It's alright";
// var str="He is called 'Tom'";
// console.log(str);
// var str='He is called "Tom"';
// console.log(str);

// JavaScript 数值
// var x1 = 34.00;      //使用小数点来写
// var x2 = 34;         //不使用小数点来写
// console.log(x1);
// console.log(x2);
// parseInt：将其他数据类型转换为整数

// parseFloat：将其他数据类型转换为浮点数

// Number：将其他数据类型转换为数值
// JavaScript 布尔

// var x = true;
// var y = false;
// console.log(y);
// 数组
//var cars = new Array();
//cars[0] = "Saab";
//cars[1] = "Volvo";
//cars[2] = "BMW";
//console.log(cars);
// JavaScript 对象
// var person = {
//     firstname : "John",
//     lastname  : "Doe",
//     id        :  5566
// };
//     console.log(person);

// ## 声明变量类型

//  声明新变量时，可以使用关键词 "new" 来声明其类型： 
// var carname=new String;
// var x = new Number;
// var y = new Boolean;
// var cars = new Array;
// var person = new Object; 


// JavaScript Array（数组） 对象

// var mycars = new Array();
// mycars[0] = "Saab";
// mycars[1] = "Volvo";
// mycars[2] = "BMW";
// console.log(mycars);
// ## 创建一个数组

// 创建一个数组，有三种方法。

// 1: 常规方式: 
// var arr = new Array();
// arr[0] = "Saab";      
// arr[1] = "Volvo";
// arr[2] = "BMW";
// console.log(arr);
// 2: 简洁方式:
// var arr = new Array("Saab","Volvo","BMW");
// console.log(arr);
// 3: 字面:
// var myCars = ["Saab","558","BMW"];
// console.log(myCars);

// 创建新方法
// Array.prototype.myUcase = function(){
//     Array.prototype.myUcase = function(){
//      for (i = 0;i<this.length;i++){
//        this[i] = this[i].toUpperCase();
//      }
//    } 

// 事件冒泡举例
// var div1 = document.getElementById('div1');
// 	var div2 = document.getElementById('div2');
// 	var div3 = document.getElementById('div3');

// 	div1.onclick = function(){
// 		console.log("触发 div1 单击事件");
// 	}

// 	div2.onclick = function(){
// 		console.log("触发 div2 单击事件");
// 	}

// 	div3.onclick = function(){
// 		console.log("触发 div3 单击事件");
// 	}
// 事件捕获举例
// var div1 = document.getElementById('div1');
// 	var div2 = document.getElementById('div2');
// 	var div3 = document.getElementById('div3');

// 	div1.addEventListener('click',function(){
// 		console.log("触发 div1 单击事件");
// 	},true);

// 	div2.addEventListener('click',function(){
// 		console.log("触发 div2 单击事件");
// 	},true);

// 	div3.addEventListener('click',function(){
// 		console.log("触发 div3 单击事件");
// 	},true);

// js原生 阻止冒泡事件的方法
// function stopPropagation(e) {  
//     e = e || window.event;  
//     if(e.stopPropagation) { //W3C阻止冒泡方法  
//         e.stopPropagation();  
//     } else {  
//         e.cancelBubble = true; //IE阻止冒泡方法  
//     }  
// }
// 手写冒泡排序和选择排序

// var arr = [3,38,44,99,88,15];
//     //定义循环次数，之前比较出的数值,不参与下一次的比较
//     for(var j = 0; j <= (arr.lenght-1)-1 ;j++){
//         //上一次比较出的数值,不参与下一次循环
//         for(var i = 0;i<= (arr.lenght-1) - 1;i++){
//             //内层循环,每次循环比较一个最大值，然后交换位置
//             if (arr[i] > arr[i + 1]){
//                 var middle = 0;
//                 middle = arr[i];
//                 arr[i] = arr[i + 1];
//                 arr[i + 1] = middle;

//             }
//         }
//     }
//     console.log(arr);

// var a =10;
// var b = 20;

// var temp;
// temp = a;//10
// a = b;//b
// b = temp//a

// var arr1 = [3,44,38,5,47,25,36,2,79,81];
//     //定义循环次数，之前比较出的数值,不参与下一次的比较
//     for(var j = 0; j <= (arr.lenght-1)-1 ;j++){
//         //上一次比较出的数值,不参与下一次循环
//         for(var i = 0;i<= (arr.lenght-1) - 1;i++){
//             //内层循环,每次循环比较一个最大值，然后交换位置
//             if (arr[i] > arr[i + 1]){
//                 var middle = 0;
//                 middle = arr[i];
//                 arr[i] = arr[i + 1];
//                 arr[i + 1] = middle;
//             }
//         }
//     }
//     console.log(arr1);


// var a =10;
// var b = 20;

// var temp;
// temp = a;//10
// a=b;//b
// b=temp//a

// // 选择
// var arr = [2,6,9,99,8,38,67,22,1];
//     //外层循环,实现排序循环次数,次数是单元个数 -1
//     for (var j = 0;j <= (arr.length-1) -1; j++){
//         //先默认起始位置就是最小值位置,存储起始位置的索引,也就是 j,之前的起始位置,不参与下一次循环
//         var min = j;//0
//         // 默认的最小值位置是当前循环的起始位置,是j,比较要从下一个位置开始,内层循环起始,是比较的起始位置+1开始循环
//         for(var i = j+1; i <= arr.length-1 ; i++){
//             //如果有单元的数值,小于存储的索引对应的数值
//             if(arr[min] > arr[i]){
//                 min = i;//下标5
//             }
//         }
//         //内层循环执行完毕,存储的索引下标如果不是起始的索引j,就交换 min中存储的索引下标对应的数值 和 j索引下标应的数值
//         if(min != j){
//             var m = 0;
//             m = arr[j];
//             arr[j] = arr[min];
//             arr[min] = m;
//         }
//     }
//     console.log(arr);

// 函数声明
// function functionName(parameters) {
//     console.log(parameters);
//   }
// 函数声明后不会立即执行，会在我们需要的时候调用到。 
// function myFunction(a, b) {
//     return a * b;
   
// }
// document.getElementById("demo").innerHTML=myFunction(4,3);

// 函数表达式
// var x = function (a, b) {return a * b};
// document.getElementById("demo").innerHTML = x;
// // 函数表达式存储在变量后，变量也可作为一个函数使用：
// var x = function (a, b) {return a * b};
// document.getElementById("demo").innerHTML = x(4, 3);


// var scope = "global";
// function t(){
//     console.log(scope);
//     var scope = "local"
//     console.log(scope);
// }
// t();
//
// var scope = "global";
// function t(){
//     var scope;
//     console.log(scope);
//     scope = "local"
//     console.log(scope);
// }
// t()